import {ref} from "vue";


/**
 * 分页数据处理函数集合
 * @param limit {number} 每页请求的条数
 * @returns {{pageMeta: Ref<UnwrapRef<{total: number, count: number, limit: number, index: number, total_pages: number, current_page: number}>>, updatePageMeta: updatePageMeta}}
 */
export function usePageMeta(limit = 10) {

    // 分页数据信息
    const pageMeta = ref({ // 分页数据
        index: 1, // 当前分页 同current_page
        total: 0, // 总数据量 同count
        count: 0, // 总数据量 同total
        limit, // 每页请求的条数
        current_page: 1, // 当前页码 同index
        total_pages: 1,  // 总页码
        isEnd: true,
    });

    /**
     * 这是定制化是更新的pageMeta的快捷方法
     * 1、一般用于请求到列表数据成功后，更新页面数据信息
     * @param page {number}
     * @param total {number}
     */
    function updatePageMeta(page, total = 0) {
        if (page !== pageMeta.value.index) { // 当前的最新页码
            pageMeta.value.index = page;
            pageMeta.value.current_page = page;
        }
        if (total !== pageMeta.value.total) { // 当前的总数据量
            pageMeta.value.total = total;
            pageMeta.value.count = total;
        }
        pageMeta.value.total_pages = Math.ceil(total / pageMeta.value.limit); // 总页码
        pageMeta.value.isEnd = pageMeta.value.index >= pageMeta.value.total_pages;
    }

    return {
        pageMeta,
        updatePageMeta,
    };
}
